/**
 * 
 */
package br.com.portal.fitness.dao;

import java.util.List;
import java.util.Map;

import org.springframework.stereotype.Repository;

import br.com.portal.fitness.model.Usuario;

import com.uaihebert.factory.EasyCriteriaFactory;
import com.uaihebert.model.EasyCriteria;


/**
 * @author rodolfo.julio
 * 
 */
@Repository
public class UsuarioDAO extends GenericDAO<Usuario, Integer> implements
		IUsuarioDAO {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	public UsuarioDAO() {

	}

	@Override
	public Usuario buscaPeloID(Integer id) {
		return getEntityManager().find(Usuario.class, id);
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<Usuario> buscaTodos() {
		return getEntityManager().createNamedQuery(Usuario.FIND_ALL)
				.getResultList();
	}

	@Override
	public Usuario buscaLoginSenha(String login, String senha) {
		return (Usuario) getEntityManager()
				.createQuery(
						"select u from Usuario u where" + " u.login = :l and"
								+ " u.senha.senha = :s")
				.setParameter("l", login).setParameter("s", senha)
				.getSingleResult();
	}

	@Override
	public Usuario buscaLogin(String login) {
		return (Usuario) getEntityManager().createNamedQuery(Usuario.FIND_BY_LOGIN)
				.setParameter("login", login).getSingleResult();
	}

	@Override
	public List<Usuario> buscaPorPaginacao(int posicaoPrimeiraLinha,
			int maximoPorPagina, String ordernarPeloCampo,
			String ordernarAscOuDesc, Map<String, String> filtros) {
		
		EasyCriteria<Usuario> eascyCriteria = EasyCriteriaFactory.createQueryCriteria(getEntityManager(), Usuario.class);
		eascyCriteria.setFirstResult(posicaoPrimeiraLinha);
		eascyCriteria.setMaxResults(maximoPorPagina);
		for (String element : filtros.keySet()) {
			eascyCriteria.andEquals(element, filtros.get(element));
		}
		
		if ("desc".equalsIgnoreCase(ordernarAscOuDesc)){
			eascyCriteria.orderByDesc(ordernarPeloCampo);
		}else{
			eascyCriteria.orderByAsc(ordernarPeloCampo);
		}
		
		return eascyCriteria.getResultList();
	}
}
